const orderItemService = require("../services/orderItemService");

/**
 * 获取所有订单项（支持分页和筛选）
 * @param {Object} req - 请求对象：query包含分页参数（page/limit）和筛选条件（orderId/productId）
 * @param {Object} res - 响应对象
 * @param {Function} next - 错误处理中间件
 */
exports.getAllOrderItems = async (req, res, next) => {
  try {
    // 分页参数（默认第1页，每页10条）
    const page = req.query.page || 1;
    const limit = req.query.limit || 10;

    // 筛选条件：按订单ID或产品ID筛选
    const filters = {
      orderId: req.query.orderId,
      productId: req.query.productId,
    };

    // 调用服务层获取订单项列表（联表订单和产品）
    const result = await orderItemService.findAllOrderItems(
      page,
      limit,
      filters
    );

    res.json({
      code: 200,
      msg: "成功",
      data: result.orderItems,
      pagination: result.pagination,
    });
  } catch (error) {
    next(error);
  }
};

/**
 * 获取单个订单项详情（联表查询）
 * @param {Object} req - 请求对象：params.id为订单项ID
 * @param {Object} res - 响应对象
 * @param {Function} next - 错误处理中间件
 */
exports.getOrderItemById = async (req, res, next) => {
  try {
    // 调用服务层获取订单项详情（联表订单+产品+用户）
    const orderItem = await orderItemService.findOrderItemById(req.params.id);

    res.json({
      code: 200,
      msg: "成功",
      data: orderItem,
    });
  } catch (error) {
    next(error);
  }
};

/**
 * 创建新订单项
 * @param {Object} req - 请求体：包含orderId、productId、quantity、price等
 * @param {Object} res - 响应对象
 * @param {Function} next - 错误处理中间件
 */
exports.createOrderItem = async (req, res, next) => {
  try {
    // 调用服务层创建订单项
    const orderItem = await orderItemService.createOrderItem(req.body);

    res.status(201).json({
      code: 201,
      msg: "订单项创建成功",
      data: orderItem,
    });
  } catch (error) {
    next(error);
  }
};

/**
 * 更新订单项
 * @param {Object} req - 请求对象：params.id为订单项ID，body为更新数据
 * @param {Object} res - 响应对象
 * @param {Function} next - 错误处理中间件
 */
exports.updateOrderItem = async (req, res, next) => {
  try {
    // 调用服务层更新订单项
    const orderItem = await orderItemService.updateOrderItem(
      req.params.id,
      req.body
    );

    res.json({
      code: 200,
      msg: "订单项更新成功",
      data: orderItem,
    });
  } catch (error) {
    next(error);
  }
};

/**
 * 删除订单项
 * @param {Object} req - 请求对象：params.id为订单项ID
 * @param {Object} res - 响应对象
 * @param {Function} next - 错误处理中间件
 */
exports.deleteOrderItem = async (req, res, next) => {
  try {
    // 调用服务层删除订单项
    const result = await orderItemService.deleteOrderItem(req.params.id);

    res.json({
      code: 200,
      msg: result.message,
    });
  } catch (error) {
    next(error);
  }
};
